package lab2;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * 客户端程序
 */
public class Client {
    public static void main(String[] args) throws IOException {
        // 停等协议
//        Configuration.sendWindowSize = 1;
//        Configuration.receiveWindowSize = 1;
//        Configuration.maxACKNumber = 2;

//        //GBN
//        Configuration.sendWindowSize = 10;
//        Configuration.timeOut = 1000;//设置超时时间
//        Configuration.sendLoss = 0.05;
//        File sendFile = new File(Configuration.clientDataSentFilePath); //发送数据的文件
//        File receiveFile = new File(Configuration.clientDataReceiveFilePath); //接收数据的文件
//        FileOutputStream fileOutputStream = new FileOutputStream(receiveFile); //文件输出流
//        byte[] sendBytes = GBN.getByteArray(sendFile); // 从发送数据的文件中读取数据
//        System.out.println("----------客户端开始发送文件----------");
//        DatagramSocket socket = new DatagramSocket(Configuration.clientPort); //获取客户端端套接字
//        socket.setSoTimeout(Configuration.socketTimeOut); // 设置超时时间
//        InetAddress address = InetAddress.getByName(Configuration.host); //获取主机ip地址
//        GBN.send(socket, sendBytes, address, Configuration.serverPort); //向客户端发送数据
//        System.out.println("----------发送成功----------");
//        // 发送数据成功，开始接收来自服务器的数据
//        System.out.println("----------开始接收数据----------");
//        GBN.receiveAndWriteToFile(fileOutputStream, socket);// 接收来自服务器的数据

        //SR
        File sendFile = new File(Configuration.clientDataSentFilePath); //发送数据的文件
        File receiveFile = new File(Configuration.clientDataReceiveFilePath); //接收数据的文件
        FileOutputStream fileOutputStream = new FileOutputStream(receiveFile); //文件输出流
        byte[] sendBytes = SR.getByteArray(sendFile); // 从发送数据的文件中读取数据
        System.out.println("----------客户端开始发送文件----------");
        DatagramSocket socket = new DatagramSocket(Configuration.clientPort); //获取客户端端套接字
        socket.setSoTimeout(Configuration.socketTimeOut); // 设置超时时间
        InetAddress address = InetAddress.getByName(Configuration.host); //获取主机ip地址
        SR.send(socket, sendBytes, address, Configuration.serverPort); //向客户端发送数据
        System.out.println("----------发送成功----------");
        // 发送数据成功，开始接收来自服务器的数据
        System.out.println("----------开始接收数据----------");
        SR.receiveAndWriteToFile(fileOutputStream, socket);// 接收来自服务器的数据
    }
}
